/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ProjetoCompreJa.DAO.DAOEspecifico;

import br.com.classesbasicas.Produto;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 *
 * @author Marcos
 */
public class DAOProduto {

    EntityManagerFactory emf;
    EntityManager em;

    public DAOProduto() {
        emf = Persistence.createEntityManagerFactory("compreja");
        em = emf.createEntityManager();
    }

    public void Cadastrar(Produto produto) throws Exception {
        try {
            em.getTransaction().begin();
            em.merge(produto);
            em.getTransaction().commit();
            emf.close();
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }

    public List<Produto> ListarTodos() throws Exception {

        try {
            em.getTransaction().begin();
            Query consulta = em.createQuery("select produto from Produto produto");
            List<Produto> produtos = consulta.getResultList();
            em.getTransaction().commit();
            emf.close();
            return produtos;

        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }

    }

    public void ExcluirProduto(Produto produto) throws Exception {

        try {
            em.getTransaction().begin();
            /*em.remove(produto);*/
            em.remove(em.getReference(Produto.class, produto.getId()));
            em.getTransaction().commit();
            emf.close();
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());

        }
    }

    public void AlterarProduto(Produto produto) throws Exception {
        try {
            em.getTransaction().begin();
            em.merge(produto);
            em.getTransaction().commit();
            emf.close();
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }
}
